package com.chinawayltd.ews.sample.mapper.order;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.chinawayltd.ews.sample.model.TOrder;
import com.chinawayltd.ews.sample.model.TOrderDetail;
import com.chinawayltd.ews.sample.model.order.InterfaceVO;
import com.chinawayltd.ews.sample.model.order.OrderDetailVO;
import com.chinawayltd.ews.sample.model.order.OrderVO;
import com.chinawayltd.ews.sample.web.query.InterfaceGirdQuery;
import com.chinawayltd.ews.sample.web.query.OrderDetailGirdQuery;
import com.chinawayltd.ews.sample.web.query.OrderGirdQuery;

/**
 * @program: greeProject
 * @description 订单mapper
 * @author: chenxin
 * @create: 2018年4月16日 下午4:50:20
 */
@Mapper
public interface OrderExtendMapper {

    /**
     * 根据查询条件与分页信息查询物料订单数据
     * @param queryParam
     * @param page
     * @return
     */
    List<OrderVO> listOrderByPage(OrderGirdQuery queryParam);
    /**
     * 异常订单
     * @author: chenxin
     * @date: 2018年5月2日
     * @param queryParam
     * @return
     */
    List<OrderVO> listAbnormalOrderByPage(OrderGirdQuery queryParam);
    
    /**
     * 通过站点查询订单
     * @author: chenxin
     * @date: 2018年4月16日
     * @param branchId
     * @return
     */
    List<TOrder> listOrderByBranch(@Param("branchId")Long branchId);
    
    /**
     * 通过订单id查询物料明细
     * @author: chenxin
     * @date: 2018年4月16日
     * @param orderId
     * @return
     */
    List<OrderDetailVO> listOrderDetailByOrderId(Long orderId);
    
    /**
     * 通过订单id查询物料明细 分页
     * @author: chenxin
     * @date: 2018年4月16日
     * @param branchId
     * @return
     */
    List<OrderDetailVO> listOrderDetailByPage(OrderDetailGirdQuery queryParam);
    
    /**
     * 根据的订单id查询订单信息
     * @author: chenxin
     * @date: 2018年4月17日
     * @param id
     * @return
     */
    OrderVO listOrderByOrderId(@Param("id")Long id);
    /**
     * 根据的订单id或者订单号查询订单信息
     * @author: chenxin
     * @date: 2018年4月17日
     * @param id
     * @return
     */
	List<OrderVO> listOrderByOrderIdOrOrderNo(@Param("orderId")Long orderId, @Param("orderNo")String orderNo);
    /**
     * 根据的任务id查询订单信息
     * @author: chenxin
     * @date: 2018年4月17日
     * @param id
     * @return
     */
	List<OrderVO> listOrderByTaskId(@Param("taskId")Long taskId);
    /**
     * 通过订单id或者订单号查询物料明细
     * @author: chenxin
     * @date: 2018年4月16日
     * @param branchId
     * @return
     */
	List<OrderDetailVO> listOrderDetailByOrderIdOrOrderNo(@Param("orderId")Long orderId, @Param("orderNo")String orderNo);
	/**
	 * 检验订单号唯一性
	 * @author: chenxin
	 * @date: 2018年4月20日
	 * @param orderId
	 * @param orderNo
	 * @return
	 */
	TOrder isHasOrderByOrderIdNO(@Param("orderId")Long orderId, @Param("orderNo")String orderNo);
	/**
	 * 新增订单
	 * @author: chenxin
	 * @date: 2018年4月20日
	 * @param record
	 * @return
	 */
    int insert(TOrder record);
	/**
	 * 新增物料订单明细
	 * @author: chenxin
	 * @date: 2018年4月20日
	 * @param record
	 * @return
	 */
    int insertDetail(TOrderDetail record);
    /**
     * 通过物料id查询订单明细
     * @author: chenxin
     * @date: 2018年5月2日
     * @param id
     * @return
     */
	List<TOrderDetail> listOrderDetailByMaterielId(@Param("id")Long id);
	/**
	 * 根据订单id删除订单明细
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param id
	 * @return
	 */
	int deleteDetail(@Param("id")Long id);
	
	/**根据字典的infoid获取货物需运输板位数
	 * @author Fay
	 * @date 2018年5月14日 上午11:02:32
	 * @param transportUnit
	 * @return
	 */
	int getTransportUnitByInfoId(@Param("transportUnit")String transportUnit);

	/**通过order对象查询符合同一个子单号的id
	 * @author Fay
	 * @date 2018年5月16日 上午10:00:11
	 * @param order
	 * @return
	 */
	List<Map<String, Object>> selectMaterielIdsByOrder(OrderVO order);
	
	/**查询物料订单，返回的格式为List<map>
	 * @author Fay
	 * @date 2018年5月24日 上午10:27:12
	 * @param queryParam
	 * @return
	 */
	List<Map<String, Object>> listOrderToMap(OrderGirdQuery queryParam);
	
	/**查询异常物料订单信息，结果为List<Map>
	 * @author Fay
	 * @date 2018年5月24日 上午10:54:29
	 * @param queryParam
	 * @return
	 */
	List<Map<String, Object>> listAbnormalOrderToMap(OrderGirdQuery queryParam);
	
	/**根据运输任务id查询订单列表
	 * @author Fay
	 * @date 2018年5月25日 上午10:12:41
	 * @param taskId
	 * @return
	 */
	List<OrderVO> selectOrderVoByTaskId(@Param("taskId")Long taskId);
	
	/**根据订单id查询物料信息
	 * @author Fay
	 * @date 2018年5月25日 上午10:30:05
	 * @param id
	 * @return
	 */
	List<OrderDetailVO> selectMaterielByOrderId(@Param("orderId")Long id);
	/**
	 * 查询订单
	 * @author: chenxin
	 * @date: 2018年5月28日 下午9:17:30
	 * @param id
	 * @return
	 */
	OrderVO getById(@Param("id")Long id);

	/**
	 * 修改当前运输任务所关联的订单的生成状态
	 * @param taskId
	 */
    void updateOrderGenerateStatus(Map<String, Object> map);
    
	/**
	 * 修改任务关联的订单的执行状态
	 * @author: chenxin
	 * @date: 2018年5月15日 下午5:42:48
	 * @param map
	 * @return
	 */
	int updateOrderExecutState(Map<String, Object> map);

	/**
	 * 批量更新订单生成状态为调度中
	 * @param orderIdSet
	 */
	void updateSchedulingOrderStatusByIds(@Param("orderIdSet") Set<Long> orderIdSet);
	/**
	 * 查询任务调度订单
	 * @author: chenxin
	 * @date: 2018年6月28日 下午5:03:45
	 * @param beginTime
	 * @param endTime
	 * @return
	 */
	List<TOrder> getDispatchOrder(@Param("beginTime")Date beginTime, @Param("endTime")Date endTime);
	
	List<OrderVO> listOrderByOrderIds(@Param("ids")String[] ids);
	/**
	 * 查询调度日志
	 * @author: chenxin
	 * @date: 2018年7月10日 上午10:38:30
	 * @param queryParam
	 * @return
	 */
	List<InterfaceVO> dispatchLoadGirdData(InterfaceGirdQuery queryParam);
}
